#define _CRT_SECURE_NO_WARNINGS 1
//#include<iostream>
//using namespace std;
//
//int main()
//{
//    int a, b;
//    cin >> a >> b;
//    if (b == 1)
//    {
//        cout << "-" << endl;
//        cout << "move" << endl;
//    }
//    else if (a == 2)
//    {
//        cout << "-" << endl;
//        cout << "stop" << endl;
//    }
//    else
//    {
//        if (a == 0)
//        {
//            cout << "biii" << endl;
//            cout << "stop" << endl;
//        }
//        if (a == 1)
//        {
//            cout << "dudu" << endl;
//            cout << "move" << endl;
//        }
//    }
//    return 0;
//}
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
/*class num
{
  public:
    num(int x=0,int y=0)
    {
        _x=x;
        _y=y;
    }

    private:
    int _x,_y;
};*/
struct num
{
    int num1;
    int num2;
};
int fac(int x)
{
    if (x / 10 != 0)
    {
        int y = 1;
        while (x != 0)
        {
            y *= (x % 10);
            x /= 10;
        }
        return fac(y);
    }
    else
        return x;
}
int main()
{
    int a, b;
    cin >> a >> b;
    int i = 0;
    int j = 0;
    //vector<num> arr;
   /* num* arr = (num*)malloc(sizeof(num) * (a - b + 1));
    if (arr == nullptr)
    {
        return 1;
    }*/
    num arr[1000];
    int max = 0;
    for (i = a; i <= b; i++)
    {
        arr[j].num1 = i;
        int tmp = i;
        int y = 1;
        int count = 0;
       /* while (i / 10 != 0)
        {
            int x = i % 10;
            y=fac()
            i /= 10;
        }*/
        y = fac(arr[i].num1);
        if (y > max)
        {
            max = y;
        }
        arr[j++].num2 = y;
    }
    cout << max << endl;
    for (i = 0; i < j; i++)
    {
        if (arr[i].num2 == max)
        {
            cout << arr[i].num1 << endl;
        }
    }
    return 0;
}